export function params() {
    const F01 = (v, n) => {
        let V = (v * 3.3 / 255)
        let a = -6.01188
        let b = 4622.53337
        let c = -86421.7241
        let R0 = 4.7
        let VCC = 3.3
        let T = 2 * c / (-b + (b ** 2 - 4 * c * (a - Math.log(V * R0 / VCC - V))) ** 0.5) - 273.15
        return T
    }
    const to_s = (v) => {
        return ''
    }
    const tosc = (v) => {
        if (v === 0x80) return -128
        return ((~v + 1) & 0x7F) * -1
    }
    const F02 = (v, n) => {
        v = !((v >> 7) & 1) ? v : tosc(v)
        let U = (v / 127) * 10 * 1000
        return U
    }
    const F03 = (v, n) => {
        v = !((v >> 7) & 1) ? v : tosc(v)
        let U = (v / 127) * 10
        return U
    }
    const F04 = (v, n) => {
        v = !((v >> 7) & 1) ? v : tosc(v)
        let U = (v / 127) * 10 * 2
        return U
    }
    const F05 = (v, n) => {
        v = !((v >> 7) & 1) ? v : tosc(v)
        let U = (v / 127) * 10 * 1.255
        return U
    }
    const F06 = (v, n) => {
        v = !((v >> 7) & 1) ? v : tosc(v)
        let U = (v / 127) * 10 * 1.25
        return U
    }
    const F07 = (v, n) => {
        v = !((v >> 7) & 1) ? v : tosc(v)
        let U = (v / 127) * 10 * 6
        return U
    }
    let GJYC_V = (_, v) => {
        return [v.a07a, v.a07b, v.a07c, v.a07d, v.a07e, v.a07f, v.a07g, v.a07h]
    }
    let GJYC_R = (v) => {
        let c = [24, 8, 8, 8, 8, 8, 32, 32]
        return '0x' + [v.a07a, v.a07b, v.a07c, v.a07d, v.a07e, v.a07f, v.a07g, v.a07h].map(
            (a, b) => a.toString(16).padStart(c[b] / 4, 0)).join(' ').toUpperCase()
    }
    const TD01 = (v) => {
        // d: 时区为北京时的时候， 转换最终时间 需要减去offset 方可用 toISO 方法显示为北京时 - t.getTimezoneOffset()*60e3
        // 	  // d 指定时区为utc / toiso 也是utc 也就是与开始时间处于同一时区，处理过程就不需要在考虑时区问题了
        let d = new Date('2020-01-01T00:00:00Z')
        let t = parseInt(v.toString(16).padStart(12, 0).slice(0, 8), 16) * 1000 + (v & 0xFFFF) + d.getTime()
        return new Date(t).toISOString().slice(0, 23).replace('T', ' ')
    }
    return [
//        1			包同步码		16			0xEB90
        new Params('a001', '包同步码', 16, null, null, null, null),
//2			包标识		16			0x095C
        new Params('a002', '包标识', 16, null, null, null, null),
//3			包序		16
        new Params('a003', '包序', 16, null, null, null, null),
//4			包长		16			0x67
        new Params('a004', '包长', 16, null, null, null, null),
//5			副导头（时间码）		48		源码
        new Params('a005', '副导头（时间码）', 48, null, v => TD01(v), null, null),
//6			命令类型		8			0x25
        new Params('a006', '命令类型', 8, null, null, null, null),
//7			关键遥测参数		128			见附表3-7有效载荷关键遥测数据包1（粒子）关键遥测数据块参数表
        new Params('a007', '关键遥测参数', 128, null, GJYC_V, null, null, GJYC_R),
//8			TIA 负主高压检测	V	8	1553B	表格、曲线	（N/127）*10*1000（N为有符号数）	+100	-6000	+200	-6500	2s
        new Params('a008', 'TIA 负主高压检测', 8, 'V', v => F02(v, 'a008'), v => v.toFixed(3), v => v >= -6500 && v <= 200),
//9			TIA负主高压电流检测	V	8	1553B	表格、曲线	（N/127）*10（N为有符号数）	+10	-0.1	12	-0.2	2s
        new Params('a009', 'TIA负主高压电流检测', 8, 'V', v => F03(v, 'a009'), v => v.toFixed(3), v => v >= -0.2 && v <= 12),
//10			TIA门控高压电流检测	V	8	1553B	表格、曲线	（N/127）*10（N为有符号数）	10	-0.1	12	-0.2	2s
        new Params('a010', 'TIA门控高压电流检测', 8, 'V', v => F03(v, 'a010'), v => v.toFixed(3), v => v >= -0.2 && v <= 12),
//11			TEA正主高压检测	V	8	1553B	表格、曲线	（N/127）*10*1000（N为有符号数）	+6000	-200	+6200	-300	2s
        new Params('a011', 'TEA正主高压检测', 8, 'V', v => F03(v, 'a011'), v => v.toFixed(3), v => v >= -300 && v <= 6200),
//12			TEA 正主高压电流检测	V	8	1553B	表格、曲线	（N/127）*10（N为有符号数）	+10	-0.1	12	-0.2	2s
        new Params('a012', 'TEA正主高压电流检测', 8, 'V', v => F03(v, 'a012'), v => v.toFixed(3), v => v >= -0.2 && v <= 12),
//13			SIA主高压电流检测	V	8	1553B	表格、曲线	（N/127）*10（N为有符号数）	12	-0.1	12.5	-0.2	2s
        new Params('a013', 'SIA主高压电流检测', 8, 'V', v => F03(v, 'a013'), v => v.toFixed(3), v => v >= -0.2 && v <= 12),
//14			GIA 负主高压检测	V	8	1553B	表格、曲线	（N/127）*10*1000（N为有符号数）	+200	-4000	+300	-4200	2s
        new Params('a014', 'GIA 负主高压检测', 8, 'V', v => F02(v, 'a014'), v => v.toFixed(3), v => v >= -4200 && v <= 300),
//15			GIA 负主高压电流检测	V	8	1553B	表格、曲线	（N/127）*10（N为有符号数）	10	-0.1	12	-0.2	2s
        new Params('a015', 'GIA 负主高压电流检测', 8, 'V', v => F03(v, 'a015'), v => v.toFixed(3), v => v >= -0.2 && v <= 12),
//16			备用字节1		144	LVDS	源码
        new Params('a016', '备用字节1', 144, null, null, to_s, null, to_s),
//17			DPU正确指令代码		8	LVDS	源码
        new Params('a017', 'DPU正确指令代码', 8, null, null, null, null),
//18			DPU错误指令参数		8	LVDS	源码
        new Params('a018', 'DPU错误指令参数', 8, null, null, null, null),
//19			DPU错误指令状态记录		8	LVDS	源码
        new Params('a019', 'DPU错误指令状态记录', 8, null, null, null, null),
//20			GIA转发指令计数		8	LVDS	源码
        new Params('a020', 'GIA转发指令计数', 8, null, null, null, null),
//21			TIA转发指令计数		8	LVDS	源码
        new Params('a021', 'TIA转发指令计数', 8, null, null, null, null),
//22			TEA转发指令计数		8	LVDS	源码
        new Params('a022', 'TEA转发指令计数', 8, null, null, null, null),
//23			SIA转发指令计数		8	LVDS	源码
        new Params('a023', 'SIA转发指令计数', 8, null, null, null, null),
//24			GIA应答失败计数		8	LVDS	源码
        new Params('a024', 'GIA应答失败计数', 8, null, null, null, null),
//25			TIA应答失败计数		8	LVDS	源码
        new Params('a025', 'TIA应答失败计数', 8, null, null, null, null),
//26			TEA应答失败计数		8	LVDS	源码
        new Params('a026', 'TEA应答失败计数', 8, null, null, null, null),
//27			SIA应答失败计数		8	LVDS	源码
        new Params('a027', 'SIA应答失败计数', 8, null, null, null, null),
//28			DPU监控GIA +1.5V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*2（N为有符号数）	1.7	1.3	1.8	1.2	2s
        new Params('a028', 'DPU监控GIA +1.5V电源检测', 8, 'V', v => F04(v, 'a028'), v => v.toFixed(3), v => v >= 1.2 && v <= 1.8),
//29			DPU监控GIA +3.3V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*1.255（N为有符号数）	3.6	3.0	3.7	2.9	2s
        new Params('a029', 'DPU监控GIA +3.3V电源检测', 8, 'V', v => F05(v, 'a029'), v => v.toFixed(3), v => v >= 2.9 && v <= 3.7),
//30			DPU监控GIA MCP高压检测	V	8	LVDS	表格、曲线	（N/127）*10*1000（N为有符号数）	+100	-3500	+200	-3600	2s
        new Params('a030', 'DPU监控GIA MCP高压检测', 8, 'V', v => F02(v, 'a030'), v => v.toFixed(3), v => v >= -3600 && v <= 200),
//31			DPU监控TIA MCP高压检测	V	8	LVDS	表格、曲线	（N/127）*10*1000（N为有符号数）	+100	-3400	+200	-3500	2s
        new Params('a031', 'DPU监控TIA MCP高压检测', 8, 'V', v => F02(v, 'a031'), v => v.toFixed(3), v => v >= -3500 && v <= 200),
//32			DPU监控TIA +3.3V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*1.255（N为有符号数）	3.6	3.0	3.7	2.9	2s
        new Params('a032', 'DPU监控TIA +3.3V电源检测', 8, 'V', v => F05(v, 'a032'), v => v.toFixed(3), v => v >= 3.0 && v <= 3.7),
//33			DPU监控TIA +1.5V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*1.255（N为有符号数）	1.7	1.3	1.8	1.2	2s
        new Params('a033', 'DPU监控TIA +1.5V电源检测', 8, 'V', v => F05(v, 'a033'), v => v.toFixed(3), v => v >= 1.2 && v <= 1.8),
//  34			DPU监控TEA MCP高压检测	V	8	LVDS	表格、曲线	（N/127）*10*1000（N为有符号数）	+3400	-100	+3500	-200	2s
        new Params('a034', 'DPU监控TEA MCP高压检测', 8, 'V', v => F02(v, 'a034'), v => v.toFixed(3), v => v >= -200 && v <= 3500),
//35			DPU监控TEA +3.3V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*1.25（N为有符号数）	3.6	3.0	3.7	2.9	2s
        new Params('a035', 'DPU监控TEA +3.3V电源检测', 8, 'V', v => F06(v, 'a035'), v => v.toFixed(3), v => v >= 2.9 && v <= 3.7),
//36			DPU监控TEA +1.5V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*1.255（N为有符号数）	1.7	1.3	1.8	1.2	2s
        new Params('a036', 'DPU监控TEA +1.5V电源检测', 8, 'V', v => F05(v, 'a036'), v => v.toFixed(3), v => v >= 1.2 && v <= 1.8),
//37			DPU监控SIA +1.5V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*2（N为有符号数）	1.7	1.3	1.8	1.2	2s
        new Params('a037', 'DPU监控SIA +1.5V电源检测', 8, 'V', v => F04(v, 'a037'), v => v.toFixed(3), v => v >= 1.2 && v <= 1.8),
//38			DPU监控SIA +3.3V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*2（N为有符号数）	3.6	3.0	3.7	2.9	2s
        new Params('a038', 'DPU监控SIA +3.3V电源检测', 8, 'V', v => F04(v, 'a038'), v => v.toFixed(3), v => v >= 2.9 && v <= 3.7),
//39			DPU监控SIA正主高压监测	V	8	LVDS	表格、曲线	（N/127）*10*1000（N为有符号数）	6000	-100	6200	-200	2s
        new Params('a039', 'DPU监控SIA正主高压监测', 8, 'V', v => F02(v, 'a039'), v => v.toFixed(3), v => v >= -200 && v <= 6200),
//40			GIA正确指令计数		8	LVDS	源码
        new Params('a040', 'GIA正确指令计数', 8, null, null, null, null),
//41			GIA错误指令计数		8	LVDS	源码
        new Params('a041', 'GIA错误指令计数', 8, null, null, null, null),
//42			GIA指令代码		8	LVDS	源码
        new Params('a042', 'GIA指令代码', 8, null, null, null, null),
//43			GIA+5V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*2（N为有符号数）	5.25	4.75	5.5	4.5
        new Params('a043', 'GIA+5V电源检测', 8, 'V', v => F04(v, 'a043'), v => v.toFixed(3), v => v >= 4.5 && v <= 5.5),
//44			GIA前放阈值检测	V	8	LVDS	表格、曲线	（N/127）*10（N为有符号数）	4.096	0	4.1	-0.1	2s
        new Params('a044', 'GIA前放阈值检测', 8, 'V', v => F03(v, 'a044'), v => v.toFixed(3), v => v >= -0.1 && v <= 4.1),
//45			GIA灯丝电源+12V检测	V	8	LVDS	表格、曲线	（N/127）*10（N为有符号数）	2.5	1.5	3.0	1.0	2s
        new Params('a045', 'GIA灯丝电源+12V检测', 8, 'V', v => F03(v, 'a045'), v => v.toFixed(3), v => v >= 1.0 && v <= 3.0),
//46			TIA正确指令计数		8	LVDS	源码
        new Params('a046', 'TIA正确指令计数', 8, null, null, null, null),
//47			TIA错误指令计数		8	LVDS	源码
        new Params('a047', 'TIA错误指令计数', 8, null, null, null, null),
//48			TIA指令代码		8	LVDS	源码
        new Params('a048', 'TIA指令代码', 8, null, null, null, null),
//49			TIA模拟量参数序号 		16	LVDS	源码
        new Params('a049', 'TIA模拟量参数序号', 16, null, null, null, null),
//50			TIA+5V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*2（N为有符号数）	5.25	4.75	5.5	4.5	2s
        new Params('a050', 'TIA+5V电源检测', 8, 'V', v => F04(v, 'a050'), v => v.toFixed(3), v => v >= 4.5 && v <= 5.5),
//51			TIA-24V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*6（N为有符号数）	-22	-26	-21	-27	2s
        new Params('a051', 'TIA-24V电源检测', 8, 'V', v => F07(v, 'a051'), v => v.toFixed(3), v => v >= -27 && v <= -21),
//52			TIA上扫描电压检测DF1	V	8	LVDS	表格、曲线	（N/127）*10（N为有符号数）	+0.1	-5.8	+0.2	-6.0	2s
        new Params('a052', 'TIA上扫描电压检测DF1', 8, 'V', v => F03(v, 'a052'), v => v.toFixed(3), v => v >= -6.0 && v <= 0.2),
//53			TIA下扫描电压检测DF2	V	8	LVDS	表格、曲线	（N/127）*10（N为有符号数）	+0.1	-5.8	+0.2	-6.0	2s
        new Params('a053', 'TIA下扫描电压检测DF2', 8, 'V', v => F03(v, 'a053'), v => v.toFixed(3), v => v >= -6.0 && v <= 0.2),
//54			TIA门控高压使能时间		16	LVDS	源码
        new Params('a054', 'TIA门控高压使能时间', 16, null, null, null, null),
//55			TIA门控高压禁止时间		16	LVDS	源码
        new Params('a055', 'TIA门控高压禁止时间', 16, null, null, null, null),
//56			TEA正确指令计数		8	LVDS	源码
        new Params('a056', 'TEA正确指令计数', 8, null, null, null, null),
//57			TEA错误指令计数		8	LVDS	源码
        new Params('a057', 'TEA错误指令计数', 8, null, null, null, null),
//58			TEA指令代码		8	LVDS	源码
        new Params('a058', 'TEA指令代码', 8, null, null, null, null),
//59			TEA模拟量参数序号 		16	LVDS	源码
        new Params('a059', 'TEA模拟量参数序号', 16, null, null, null, null),
//60			TEA+5V电源检测	V	8	LVDS	表格、曲线	（N/127）*10*2（N为有符号数）	5.25	4.75	5.5	4.5	2s
        new Params('a060', 'TEA+5V电源检测', 8, 'V', v => F04(v, 'a060'), v => v.toFixed(3), v => v >= 4.5 && v <= 5.5),
//61			备用字节2		8	LVDS
        new Params('a061', '备用字节2', 8, null, null, to_s, null),
//62			TEA上扫描电压检测DF1	V	8	LVDS	表格、曲线	（N/127）*10（N为有符号数）	+5.8	-0.1	+6.0	-0.2	2s
        new Params('a062', 'TEA上扫描电压检测DF1', 8, 'V', v => F03(v, 'a062'), v => v.toFixed(3), v => v >= -0.2 && v <= 6.0),
//63			TEA下扫描电压检测DF2	V	8	LVDS	表格、曲线	（N/127）*10（N为有符号数）	+5.8	-0.1	+6.0	-0.2	2s
        new Params('a063', 'TEA下扫描电压检测DF2', 8, 'V', v => F03(v, 'a063'), v => v.toFixed(3), v => v >= -0.2 && v <= 6.0),
//64			SIA正确指令计数		8	LVDS	源码
        new Params('a064', 'SIA正确指令计数', 8, null, null, null, null),
//65			SIA错误指令计数		8	LVDS	源码
        new Params('a065', 'SIA错误指令计数', 8, null, null, null, null),
//66			SIA指令代码		8	LVDS	源码
        new Params('a066', 'SIA指令代码', 8, null, null, null, null),
//67			校验和		8	LVDS	源码
        new Params('a067', '校验和', 8, null, null, null, null),

    ]


}
